/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	comm_eth_task.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-05-09
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _ETH_TASK_H_
#define _ETH_TASK_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <rtthread.h>
//#include "timer.h"
#include "lwip/opt.h"
#include "netconf.h"
#include "lwip/sys.h"
#include "lwip/api.h"
#include "lwip/ip_addr.h"


/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/
#define		ETH_RECV_MEM_NUM			8
#define		ETH_RECV_MEM_LENGTH		1580

#define		ETH_PERIODIIC_INTERVAL	10
#define		TCP_CONNECTING_TIMEOUT	5000
#define		TCP_RECONNECT_INTERVAL	5000

/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
typedef enum{
	MSG_ETH_EVENT,
	MSG_TCPCLIENT_RECV,
	MSG_TCPCLIENT_SEND,
	MSG_UDP_LOG_OUTPUT,
}tcpclient_msg_t;

#pragma pack(4)
typedef struct{
	uint32_t length;
	uint8_t buff[ETH_RECV_MEM_LENGTH];
}eth_buff_t;
#pragma pack()

typedef struct ETH_CB_T{
	uint8_t		eth_link_status;
	
	uint8_t		dhcp_status;
	uint8_t		udp_status;
	uint8_t		tcp_status;
	
	ip_addr_t local_ip_addr;
	ip_addr_t remote_ip_addr;

	uint32_t	remote_tcp_port;
	uint32_t	local_tcp_port;
	
	uint32_t	local_udp_port;
	uint32_t	remote_udp_port;
	
	volatile uint64_t arp_timer;
	volatile uint64_t tcp_timer;
	volatile uint64_t dhcp_timer;
	
	struct udp_pcb * p_udp;
	struct tcp_pcb * p_tcp_client;
	
	void (*tcp_protocol_callback)(eth_msg_t msg,uint8_t* buff,uint16_t size);
	rt_timer_t timer;
}eth_cb_t;
/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/
extern struct rt_thread   	rt_eth_tcb;
extern eth_cb_t	eth_handle;
/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/
void eth_task_start(void);
void eth_tcp_cb_reg(void (*pfn_cb)(eth_msg_t msg,uint8_t* buff,uint16_t size));
void LwIP_Periodic_Handle(void*);//hw_timer_t*); 
void eth_tcp_write(uint8_t* buf, uint16_t size);
#endif
